package com.ttit.annotated.entity;

import android.util.Log;

import com.ttit.annotated.anno.Gender;
import com.ttit.annotated.anno.Name;
import com.ttit.annotated.anno.Profile;

import java.lang.reflect.Field;

public class CustomUtils {
    public static void getInfo(Class<?> clazz) {
        String name = "";
        String gender = "";
        String profile = "";
        Field fields[] = clazz.getDeclaredFields();
        for (Field field : fields) {
            if (field.isAnnotationPresent(Name.class)) {
                Name arge = field.getAnnotation(Name.class);
                name = name + arge.value();
                Log.i("Gmw", "name=" + name);
            }
            if (field.isAnnotationPresent(Gender.class)) {
                Gender arge = field.getAnnotation(Gender.class);
                gender = gender + arge.gender().toString();
                Log.i("Gmw", "gender=" + gender);
            }
            if (field.isAnnotationPresent(Profile.class)) {
                Profile arge = field.getAnnotation(Profile.class);
                profile = "[id=" + arge.id() + ",height="
                        + arge.height() + " ,nativePlace="
                        + arge.nativePlace() + "]";
                Log.i("Gmw", "profile=" + profile);
            }
        }
    }
    //CustomUtils.getInfo(Person.class);

}
 /*   当一个 Annotation 被定义为运行时Annotation后，改注解才是运行时可见的，当class文件被装载时被保存在class文
 件中的Annotation才会被虚拟机读取。
        AnnotatedElement 接口提供了以下四个方法来访问 Annotation 的信息：

        方法1：<T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回改程序元素上存在的、
 指定类型的注解，如果该类型注解不存在，则返回null。

        方法2：Annotation[] getAnnotations():返回该程序元素上存在的所有注解。

        方法3：boolean is AnnotationPresent(Class<?extends Annotation> annotationClass):判断该程序元素
  上是否包含指定类型的注解，存在则返回true，否则返回false.

        方法4：Annotation[] getDeclaredAnnotations()：返回直接存在于此元素上的所有注释。与此接口中的其他方法不同
        ，该方法将忽略继承的注释。（如果没有注释直接存在于此元素上，则返回长度为零的一个数组。）该方法的调用者可以随意修改
        返回的数组；这不会对其他调用者返回的数组产生任何影响
  */
